package com.flying.set;

import java.util.HashSet;
import java.util.Set;

/**
 * @author 刘鹏飞
 * @ClassName HashSetTest2
 * @Date 2025/1/4 22:26
 * @Created by 刘鹏飞
 * @Description
 *  使用HashSet存储自定义对象
 *
 *  HashSet底层使用的是HashMap --> HashMap底层使用的是数组+链表+红黑树
 *  存储元素特点:
 *           无序性: 无序性不是指添加元素的殊勋和变量容器是的顺序不一致.而是与元素的存储位置有关.
 *           HashSet底层使用HashMap进行存储数据,而HashMap底层使用哈希表 结构进行存储数据.
 *           通过对象的hashcode()计算出对象的哈希值,决定对象在数组中的存储位置,此位置不是依次排列的,表现为无序性
 *
 *
 *           JDK8及以后:
 *           哈希表 :
 *                 -- 数组
 *                   |--- 链表
 *                   |--- 红黑树
 *
 *
 *           不可重复性:
 *              比较的标准是通过 对象的hashcode()计算出来的哈希值和equals()方法的boolean型返回值决定的
 *              当两个对象的hashcode()值相同并且equals()方法返回true则认为两个对象时同一个对象,则不会将后一个对象添加到Set容器中
 *
 *
 *
 *
 *
 *
 *
 *
 *
 */public class HashSetTest1 {

    public static void main(String[] args) {

        Set<Users>  usersSet=new HashSet<>();


        Users user = new Users("黄忠",18);
        Users user1 = new Users("马超",24);
        Users user2 = new Users("关羽",65);
        Users user3 = new Users("赵云",34);
        Users user4 = new Users("张飞",34);
        Users user5 = new Users("张飞",34);


        usersSet.add(user);
        usersSet.add(user1);
        usersSet.add(user2);
        usersSet.add(user3);
        usersSet.add(user4);
        usersSet.add(user5);  // 添加成功


        for (Users users : usersSet) {
            System.out.println(users);
        }






    }


}
